package com.hpin.fansea.base;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.IBinder;
import android.os.Looper;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;

import com.hpin.fansea.ui.LoginActivity;
import com.hpin.fansea.utils.CommonUtils;
import com.hpin.fansea.utils.Constant;

/**
 * Created by Aaron on 15/9/7.
 */
public abstract class BaseActivity extends Activity implements View.OnClickListener{

    protected MyApplication mApplication;
    protected SharedPreferences sp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // 竖屏锁定
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        mApplication = (MyApplication) getApplication();

        sp = getSharedPreferences(Constant.CONFIG, MODE_PRIVATE);

    }

    /**控件点击事件*/
    public abstract void widgetClick(View v);

    @Override
    public void onClick(View v) {
        widgetClick(v);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {

            // 获得当前得到焦点的View，一般情况下就是EditText（特殊情况就是轨迹求或者实体案件会移动焦点）
            View v = getCurrentFocus();

            if (isShouldHideInput(v, ev)) {
                hideSoftInput(v.getWindowToken());
            }
        }
        return super.dispatchTouchEvent(ev);
    }

    /**
     * 根据EditText所在坐标和用户点击的坐标相对比，来判断是否隐藏键盘，因为当用户点击EditText时没必要隐藏
     *
     * @param v
     * @param event
     * @return
     */
    private boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] l = { 0, 0 };
            v.getLocationInWindow(l);
            int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
                    + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                // 点击EditText的事件，忽略它。
                return false;
            } else {
                return true;
            }
        }
        // 如果焦点不是EditText则忽略，这个发生在视图刚绘制完，第一个焦点不在EditView上，和用户用轨迹球选择其他的焦点
        return false;
    }

    /**
     * 多种隐藏软件盘方法的其中一种
     *
     * @param token
     */
    private void hideSoftInput(IBinder token) {
        if (token != null) {
            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            im.hideSoftInputFromWindow(token,
                    InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }


    // /屏蔽按键
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_MENU:
                return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    /**
     * 土司
     * @param text
     */
    public void showToast(final String text) {

        if (Thread.currentThread() == Looper.getMainLooper().getThread()) {

            // 如果在主线程中
            showToash(text);

        } else {
            // 在子线程中
            runOnUiThread(new Runnable() {

                public void run() {
                    showToash(text);
                }

            });

        }
    }

    private void showToash(final String text) {

        if (!CommonUtils.isNull(text)) {
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
        }

    }

    /**
     * 提示游客登陆
     * @param reminder 提示的内容
     */
    protected void remindLogin(String reminder) {

        //游客
        AlertDialog.Builder mbuilder = new AlertDialog.Builder(this);
        mbuilder.setMessage(reminder).setNegativeButton("取消", null).setPositiveButton("登录", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

                mApplication.clearActivity();

                Intent visitorIntent = new Intent(BaseActivity.this, LoginActivity.class);
                startActivity(visitorIntent);
            }
        }).show();

    }

}
